/**
 * 用户业务逻辑处理
 * @Author: liruilin 1443254530@qq.com
 * @Date: 2025-4-8 14:02:26
 * @LastEditors: liruilin 1443254530@qq.com
 * @FilePath: libs\hooks\user.js
 * @Description: 用户业务逻辑处理
 */

import { useUserStore } from "@/libs/store"
import $routes from "@/libs/config/route.js"

/**
 * 判断登录操作执行，所有需要登录才能执行的操作，可以用此方法，而不是在页面上去判断isLogin
 * 示例：
 *    function submit(){ 
 *      api().then(res => {})
 *    }
 *    hasLoginTask(submit)
 * 
 * @param {function} task 
 * @param {string} tips 
 */
export const hasLoginTask = function(task, tips = '您需要登录后才能继续操作'){
    const userStore = useUserStore()
    if(userStore.isLogin){
        typeof task === 'function' && task()
    }else {
        // 这里可以进行提示用户需不需要去登录，然后跳转到登录页面
        uni.showModal({
            title: '提示',
            content: tips,
            success: function (res) {
                exitLoginPageProcessing(res.confirm)
            }
        })
    }
}

/**
 * 退出登录处理
 * @param {boolean} routeLogin  跳转登录页面
 */
export const exitLoginPageProcessing = function (routeLogin = false){
    const userStore = useUserStore()
    // 清除缓存
    userStore.clearInfo()
    
    // #ifdef APP-PLUS
    // plus.runtime.quit()
    // #endif
    // #ifdef H5
    // window.close()
    // #endif
    // 返回至不需要登录的页面后再 跳转登录页面
    function toLogin() {
        const { loginPage } = uni.$mp.config
        if(routeLogin && loginPage){
            // if (currentRoute == loginPage) return
            uni.navigateTo({
                url: loginPage
            })
        }
    }
    const pages = getCurrentPages()
    // 不去登录页则判断当前页面是不是需要登录的页面，如果需要登录，则返回至不需要登录的页面，否则去重定向页面
    if(isCurrentPageByLogin()){
        let i = pages.length - 1
        // 例如H5刷新，或者小程序扫码直接进入二级页面的情况下，是没有路由栈的，这里直接进入首页
        if(i == 0){
            uni.redirectTo({
                url: uni.$mp.config.homePage,
                success() {
                    toLogin()
                }
            })
        }else {
            // 查找返回至不需要登录的页面的返回数量
            for(i;i >= 0; i--){
                let p = pages[i]
                if(!$routes[ '/' + p.route ] || !$routes[ '/' + p.route ].loginAuth){
                    break
                }
            }
            
            let backIndex = pages.length - 1 - i
            uni.navigateBack({
                delta: backIndex,
                complete() {
                    toLogin()
                }
            })
        }
        
    }else {
        toLogin()
    }
}

/**
 * 判断当前页面是否是需要登录才能访问的页面
 */
export const isCurrentPageByLogin = function (){
    const pages = getCurrentPages()
    if(!pages.length) return 
    const currentRoute = '/' + pages[pages.length - 1].route
    return $routes[currentRoute]?.loginAuth || false
}